import BaseVenueProcessor from './BaseVenueProcessor.js';
import { getSongShanHuTaiLuGeVenueSettings } from '../request.js';

/**
 * 松山湖太鲁阁公园场地数据处理器
 */
export class SongShanHuTaiLuGeProcessor extends BaseVenueProcessor {
  constructor() {
    super();
    this.venueName = '松山湖太鲁阁公园';
  }

  /**
   * 获取松山湖太鲁阁公园场地预约设置
   * @param {Object} params - 查询参数 { gym_id, type, date }
   * @returns {Promise} 请求Promise
   */
  async getVenueSettings(params = {}) {
    // 设置默认参数
    const defaultParams = {
      gym_id: 42,
      type: 'site',
      date: '2025-08-20'
    };
    
    // 合并参数
    const requestData = { ...defaultParams, ...params };
    
    return await getSongShanHuTaiLuGeVenueSettings(requestData);
  }

  /**
   * 验证数据是否有效
   * @param {Object} data - 原始场地数据
   * @returns {boolean} 数据是否有效
   */
  validateData(data) {
    
    return data && 
           Array.isArray(data) && 
           data.length > 0 &&
           data[0].site &&
           data[0].sch;
  }

  /**
   * 按场地名称分组
   * @param {Object} data - 原始场地数据
   * @returns {Map} 场地Map
   */
  groupVenues(data) {
    const venueMap = new Map();
    
    // 直接使用传入的数据数组
    const dataArray = data;
    console.log("dataArray",dataArray);
    
    // 遍历数据数组，为每个场地创建一个条目
    dataArray.forEach(item => {
      if (item.site && item.site.name) {
        const venueName = item.site.name;
        if (!venueMap.has(venueName)) {
          venueMap.set(venueName, {
            name: venueName,
            timeSlots: []
          });
        }
      }
    });
    
    return venueMap;
  }

  /**
   * 处理时间槽
   * @param {Map} venueMap - 场地Map
   * @param {Object} data - 原始场地数据
   */
  processTimeSlots(venueMap, data) {
    // 直接使用传入的数据数组
    const dataArray = data;
    
    // 遍历数据数组
    dataArray.forEach(item => {
      if (item.site && item.site.name && item.sch) {
        const venueName = item.site.name;
        const venue = venueMap.get(venueName);
        
        if (venue) {
          // 遍历每个场地的时间安排
          item.sch.forEach(schedule => {
            const timeSlot = `${schedule.start_time}-${schedule.end_time}`;
            const beginDatetime = `${this.selectedDate} ${schedule.start_time}`;
            const endDatetime = `${this.selectedDate} ${schedule.end_time}`;
            
            // 检查是否可预约
            const isFree = !schedule.is_reserved;
            
            // 添加时间槽信息
            venue.timeSlots.push({
              time: timeSlot,
              isFree: isFree,
              price: parseFloat(schedule.price) || 0,
              beginDatetime: beginDatetime,
              endDatetime: endDatetime
            });
          });
        }
      }
    });
  }

  /**
   * 转换为场地列表
   * @param {Map} venueMap - 场地Map
   * @returns {Array} 场地列表
   */
  convertToVenueList(venueMap) {
    return Array.from(venueMap.values()).map((venue, index) => {
      return {
        id: 21000 + index, // 给松山湖太鲁阁公园场地分配ID
        name: venue.name,
        address: '东莞市松山湖太鲁阁公园',
        latitude: 22.890727,
        longitude: 113.924630,
        phone: '0769-33445566',
        rating: 4.5,
        price: 0,
        facilities: ['室外场地', '专业教练', '器材租赁', '休息区', '停车场'],
        image: '',
        distance: 30.5,
        timeSlots: venue.timeSlots,
        dataSource: this.venueName
      };
    });
  }
  /**
   * 处理场地数据
   * @param {Object} data - 原始场地数据
   * @param {string} selectedDate - 选择的日期
   * @returns {Array} 处理后的场地列表
   */
  process(data, selectedDate) {
    this.selectedDate = selectedDate;
    
    // 验证数据
    if (!this.validateData(data.data.data.data)) {
      console.error('松山湖数据验证失败');
      return [];
    }
    
    // 按场地名称分组
    const venueMap = this.groupVenues(data.data.data.data);
    
    // 处理时间槽
    this.processTimeSlots(venueMap, data.data.data.data);
    
    // 转换为场地列表
    return this.convertToVenueList(venueMap);
  }
}

export default SongShanHuTaiLuGeProcessor;